<?php

class Form_Signup extends Form_Ru
{

    public function init()
    {
        $this->setMethod('post');
        $this->addElement(
            'text', 'username', array(
            'label' => 'Логин для входа: ',
            'required' => true,
            'filters' => array('StringTrim'),
            'validators' => array( new ValidateUsernameAvailable() )   
        ));
        $this->addElement('password', 'password', array(
            'label' => 'Пароль: ',
            'required' => true,
            'validators' => array(
                array('NotEmpty', true),
                array('StringLength', true, array('min' => 6)),
                'Alnum'
            ),
        ));
        $this->addElement('password', 'password_confirm', array(
            'label' => 'Пароль еще раз: ',
            'required' => true,
            'validators' => array(array('identical', true, array('password'))),
            'ignore' => true,
        ));
        
        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('Email: ')
               ->setRequired(true)
                ->addValidator('EmailAddress');
                //->addValidator( new ValidateMailAvailable());
        $this->addElement($email);

        $dropdown = new Zend_Form_Element_Select('role');
        $dropdown->setLabel('Ваш статус:')
            ->setMultiOptions(array(
                1 => 'Студент',
                2 => 'Лектор',
                //3 => 'Админ'
            ))->addValidator(new Zend_Validate_Int);
        $this->addElement($dropdown);
        
        $dropdown2 = new Zend_Form_Element_Select('role2');
        $dropdown2->setLabel('Ваш статус:')
            ->setMultiOptions(array(
                1 => 'Студент',
                2 => 'Лектор',
                3 => 'Админ'
            ))->addValidator(new Zend_Validate_Int);
        $this->addElement($dropdown2);

        $this->addElement('captcha', 'captcha', array(
            'label'      => 'Введите символы с картинки:',
            'required'   => true,
            'ignore' => true,            
            'captcha'    => array (
            'captcha' => 'Image',
            'wordLen' => 4,//длинна капчи, симв.
            'timeout' => 300, //время жизни кода капчи
            )
        ));           
        //время на хранение файла капчи (в секундах)
        $this->getElement('captcha')->getCaptcha()->setExpiration(300);
        
        $this->setAction(Zend_Navigation_Page_Mvc::factory(array(
                    'action' => 'signup',
                    'controller' => 'auth'
                ))->getHref());        
        $this->addElement('submit', 'submit', array(
            'ignore' => true,
            'label' => 'Создать аккаунт',
            'class'=>'btn'
        ));
    }
}

class ValidateUsernameAvailable extends Zend_Validate_Abstract
{
    const USED = 1;    
    protected $_messageTemplates = array(
        self::USED => "Логин '%value%' уже занят"
    );
    
    public function isValid($value)
    {
        $this->_setValue($value);
        
        if (is_array(Zend_Db_Table::getDefaultAdapter()
                ->select()
                ->from(TABLE_PREF . 'users')
                ->where('username = ?', $value)
                ->limit(1)
                ->query()
                ->fetch())
        )
        {
            $this->_error(1);
            return false;
        }

        return true;
    }
}

//class ValidateMailAvailable extends Zend_Validate_Abstract
//{
//    const USED = 1;    
//    protected $_messageTemplates = array(
//        self::USED => "Email '%value%' уже занят"
//    );
//    
//    public function isValid($value)
//    {
//        $this->_setValue($value);
//        
//        if (is_array(Zend_Db_Table::getDefaultAdapter()
//                ->select()
//                ->from(TABLE_PREF . 'users')
//                ->where('email = ?', $value)
//                ->limit(1)
//                ->query()
//                ->fetch())
//        )
//        {
//            $this->_error(1);
//            return false;
//        }
//
//        return true;
//    }
//}
